1.今天在用地区表setting_area和国家表setting_country进行做业务时,罗列国家字段,想知道对应是哪个地区并且要知道这个地区的详细信息,有人会使用双层foreach的写法,数量少,当然没问题,但是一旦遍历的一定量的数据,这个写法会被挨骂吧!


2.抛出使用laravel的with方法,其实可以考虑使用数组key映射的思想。


3.例如先查出来所有的国家数据,国家里面时有个字段area_id关联是地区表主键,(建议吧地区名称area_name同时冗余到国家表中,),当然,这个反范式有好处也有不好的地方,这里不赘述,可以自行百度。

国家表查出来吼,检索出对应的area_id,并且进行去重

用这个area_id的结果集,ids,到地区表进行wherein的查询

重点来了,吧获取的id当然一个二维数组的key,可以用array_column实现。

最后foreach获取的国家数据,用数组key映射的办法映射进去,即可。


4.赋值代码如下:

$country = DB::table("setting_country")->get();
$ids = array_unique($country->pluck('area_id')->toArray());
$some_other_infos = SettingAreaModel::select()
->whereIn('id', $ids)
->get()
->toArray();
$new_array = array_column ($some_other_infos,null,"id");
foreach ($country as $key=>$item) {
    $country[$key]->area_info = $new_array[$item->area_id];
}

代码只是随手写写,开发的时候不建议使用Facades里的DB,建议区使用单例模式的思想去书写,更加优雅。



葡萄酒不吐葡萄皮
1.1k 声望74 粉丝

just do It


« 上一篇
GIt 小聪明
下一篇 »
学MySQL